package main

import (
	"fmt"
	"unsafe"
)

func main() {
	fmt.Print("今天是\n2022年\t5月29\n")

	// 定义变量写法1
	var age int = 18
	fmt.Println("我的年龄是: ", age)	// 我的年龄是:  18
	// 定义变量写法2
	age2 := 28
	fmt.Println("我的真实年龄是: ", age2)	// 我的真实年龄是:  28
	// go语言的特性: 类型推断, 用 %T
	// 注意调用的api
	fmt.Printf("年龄的类型是:%T", age2)	// 年龄的类型是:int

	// 写法3: 定义多个变量,并且是多种数据类型
	var a = 1	// js的写法
	fmt.Println(a)
	// 先声明,再赋值
	var b int
	b = 2
	//b = "abc"		// 上面定义了int类型,所以会报错
	fmt.Println(b)
	// 定义多个
	var name, age3, address = "abiu", 28, "河南"
	// \n只是为了打印时候与上一行换行
	// 定义几个变量就要用到几个,如果定义了没有使用,会报错
	fmt.Println("\n", name, age3, address) //  abiu 28 河南
	// %s 获取字符串类型的值
	fmt.Printf("name值:%s, name类型:%T", name, name)	// name值:abiu, name类型:string
	// %d 获取整数类型的值
	fmt.Printf("\nage3值:%d, age3类型:%T", age3, age3)	// age3值:28, age3类型:int
	fmt.Println()
	// 因为 := 表示重新定义的一个变量,但是上面已经定义了,所以会报错
	//age3 := 30;
	fmt.Print(age3)
	fmt.Println()
	fmt.Println(unsafe.Sizeof(age3))

}
